import { getDict } from '@/api/dict'

const dicts = {
  namespaced: true,
  state: {
    dicData: {}
  },

  mutations: {
    UPDATE_DICT(state, { key, data }) {
      // this.$set(state.dicData, key, data);
      state.dicData[key] = data
    }
  },
  actions: {
    // async getDict ({ commit }, params) {
    //   console.log(params,'1233333');
    //   const { result } = await getDict(params)
    //   commit("UPDATE_DICT", {
    //     key: params,
    //     data: result || [],
    //     });

    // },
    // getDictAll ({ dispatch }, args = []) {
    //   console.log("🤡 ~ args:", args)
    //   args.forEach(async (code) => {
    //     console.log(code, 'code')
    //     await dispatch("getDict", { code })
    //   })
    //   // Promise.all(
    //   //   args.map(code => {
    //   //     return new Promise(async (resolve) => {
    //   //       await dispatch("getDict", { code })
    //   //       resolve()
    //   //     })
    //   //   })
    //   // )
    // }
    getDict({ commit }, params) {
      let cb = params.cb
      delete params.cb
      console.log(params, 'params')
      getDict(params.code).then(res => {
        commit('UPDATE_DICT', {
          key: params.code,
          data: res.result || []
        })
        if (cb && typeof cb === 'function') {
          cb(res.result)
        }
      })
    },
    getDictAll({ dispatch }, args = []) {
      args.forEach(code => {
        dispatch('getDict', { code })
      })
    },
    getDict_promis({ commit }, params) {
      let cb = params.cb
      delete params.cb
      return new Promise(resolve => {
        getDict(params.code).then(res => {
          commit('UPDATE_DICT', {
            key: params.code,
            data: res.result || []
          })
          if (cb && typeof cb === 'function') {
            cb(res.result)
          }
          resolve()
        })
      })
    }
  },
  getters: {
    getDictByCode: state => {
      return code => {
        if (state[code]) return state[code]
        // return state.dicData && state.dicData[code];
        return (state.dicData && state.dicData[code]) || []
      }
    }
  }
  // getters: {
  //   getDictByCode: state => state.dicData
  // },
}

export default dicts
